//
//  String+Extension.swift
//  Weibo
//
//  Created by cc on 10/31/17.
//  Copyright © 2017 cc. All rights reserved.
//

import Foundation

extension String {
    
    //从当前字符串中， 提取链接和文本
    //元组
    func cz_href() -> (link: String, text: String)? {
        
        //0. 匹配方案
        let pattern = "<a href=\"(.*?)\".*?>(.*?)</a>"
        
        //1. 创建正则表达式, 并且匹配第一项
        guard let regx = try? NSRegularExpression(pattern: pattern, options: []),
            let result = regx.firstMatch(in: self, options: [], range: NSRange(location: 0, length: characters.count)) else {
            return nil
        }
        
        //2. 获取结果
        let link = (self as NSString).substring(with: result.range(at: 1))
        let text = (self as NSString).substring(with: result.range(at: 2))
        return (link, text)
    }
    
    
    
    func demo() {
        
        //1. <a href=\"http:www.weibo.com\" rel="nofollow\">微博 weibo.com</a>
        // 目标： 取出 href 中的链接，以及文本描述
        let string = "<a href=\"http://www.weibo.com\" rel=\"nofollow\">微博 weibo.com</a>"
        
        //2.创建正则表达式
        //0> pattern - 常说的正则表达式，就是pattern的写法[匹配方案]
        //索引：
        // 0: 和匹配方案完全一致的字符串
        // 1: 第一个()中的内容
        // 2: 第二个()中的内容
        // ... 索引从左到右顺序递增
        
        //对于模糊匹配
        //如果关心的内容，就使用(.*?),然后通过索引可以获取结果
        //如果不关心的内容， 就是 `.*?`，可以匹配任意的内容
        let pattern = "<a href=\"(.*?)\".*?>(.*?)</a>"
        
        // 1>创建正则表达式， 如果pattern 失败，抛出异常
        guard let regx = try? NSRegularExpression(pattern: pattern, options: []) else {
            return
        }
        
        // 2> 进行查找， 两种查找方法
        //[只找第一个匹配项 / 查找多个匹配项]
        guard let result = regx.firstMatch(in: string, options: [], range: NSRange(location:0, length: string.characters.count)) else{
            print("not find ")
            return
        }
        
        // 3> result中只有两个重要的方法
        //result.numberOfRanges -> 查找到的范围数量
        //result.range(at: idx) -> 指定 `索引` 位置的范围
        
        print("找到的数量 \(result.numberOfRanges)")
        
        for idx in 0..<result.numberOfRanges {
            let r = result.range(at: idx)
            let subStr = (string as NSString).substring(with: r)
            
            print("\(idx) - \(subStr)")
        }
    }
}
